#define _CRT_SECURE_NO_WARNINGS 1

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<assert.h>
//char* func(char* pa,const char* pb)
//{
//	assert(pa && pb);
//	char* ret = pa;
//	while (*pa != '\0')
//	{
//		pa++;
//	}
//	while (*pa++ = *pb++)
//	{
//		;
//	}
//	return ret;
//}
//int main()
//{
//	char arr1[100] = "abcdefg";
//	char arr2[] = "ab";
//	char* ret = func(arr1, arr2);
//	printf("%s", arr1);
//	return 0;
//}
//char* func(const char* str,const char* substr)
//{
//	assert(str && substr);
//	char* s1 = str;
//	char* s2 = substr;
//	char* cur = str;
//	if (*substr == '\0')
//		return str;
//	while (*cur)
//	{
//		s1 = cur;
//		s2 = substr;
//		while (*s1 == *s2 && *s1 && *s2)
//		{
//			s1++;
//			s2++;
//		}
//		
//		if (*s2 == '\0')
//			return cur;
//		else if (*s1 == '\0')
//			return NULL;	
//		cur++;
//	}
//
//}
//int main()
//{
//	char arr[] = "abbbcdeg";
//	char arr1[] = "bbc";
//	char* ret = func(arr, arr1);
//	printf("%s", ret);
//	
//	return 0;
//}
//void func(void* pa, void* pb,size_t num)
//{
//	assert(pa && pb);
//	while (num--)
//	{
//		*(char*)pa = *(char*)pb;
//		pa = (char*)pa + 1;
//		pb = (char*)pb + 1;
//	}
//}
int main()
{
	int arr1[10] = { 0 };
	int arr2[10] = { 1,2,3,4,5,6,7,8,9 };
	func(arr1, arr2, sizeof(arr2[0]) * 9);
	for (int i = 0; i < 9; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}
void func(void* pa,const void* pb,size_t num)
{
	if (pa < pb)
	{
		while (num--)
		{
			*(char*)pa = *(char*)pb;
			pa = (char*)pa + 1;
			pb = (char*)pb + 1;
		}
	}
	else if (pa >= pb)
	{
		while (num--)
		{
			*((char*)pa + num) = *((char*)pb + num); 
		}
	}
}

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	func(arr + 4, arr + 2,sizeof(arr[0]) * 3);
	for (int i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}
	return 0;
}
//int main()
//{
//    int i = 0;
//   
//    for (i = 10000; i <= 99999; i++)
//    {
//        int sum = 0;
//        for (int j = 1; j <= 4; j++)
//        {
//            sum += (int)(i / pow(10, j)) * (int)(i % (int)pow(10, j));
//        }
//        if (sum == i)
//        {
//            printf("%d ", i);
//        }
//    }
//    return 0;
//}
//int main()
//{
//	int a = pow(10, 2);
//	int b = a % 10;
//	printf("%d", b);
//	return 0;
//}
int cmp(const void* pa, const void* pb)
{
	return *(int*)pa - *(int*)pb;
}

int main()
{
	int arr1[100] = { 0 };
	int arr2[100] = { 0 };
	int n = 0;
	int m = 0;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	for (int i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	memcpy(arr1 + n, arr2, m * sizeof(int));
	qsort(arr1, m + n, sizeof(int), cmp);
	for (int i = 0; i < m + n; i++)
	{
		printf("%d ", arr1[i]);
	}
	return 0;
}


